{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "import os\n",
    "import json\n",
    "import numpy as np\n",
    "\n",
    "import torch\n",
    "\n",
    "from dataset import data_transform\n",
    "from utils import DotDict, Logger, evaluate_temp_att, denormalize_data, rmse, bias, rel_error\n",
    "from dense import MLP\n",
    "sys.path.append('../Spatial module/') \n",
    "from sp_att_mech import AttentionCNN\n",
    "sys.path.append('../Temporal module/') \n",
    "from bahdanau_att import EncoderLSTM, BahdanauDecoder\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DATA IMPORTATION AND VISUALIZATION"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.colorbar.Colorbar at 0x7fa58f272c50>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "datadir = 'data'\n",
    "dataset = 'dense_data.csv'\n",
    "data = torch.Tensor(np.genfromtxt(os.path.join('..',datadir, dataset)))\n",
    "\n",
    "plt.figure('Traffic Dataset')\n",
    "plt.imshow(data[:,1:30].squeeze().numpy().T, aspect='auto', cmap='jet')\n",
    "plt.title('Traffic Dataset')\n",
    "plt.xlabel('Timestep')\n",
    "plt.ylabel('Sensor')\n",
    "plt.colorbar()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TRAINING AND TEST ERROR METRICS\n",
    " - Additional parameters via --parameter_name value\n",
    " - For simplicity, 60%-20%-20% validation scheme (training-validation-test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 18%|█▊        | 37/200 [02:28<10:35,  3.90s/it, lr=1e-5, train_mse=0.0101, train_rmse=0.101, val_mse=0.00953, val_rmse=0.0976]  "
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "================================================\n",
      " *  Test MSE:  67139.8984375 \n",
      " *  Test RMSE:  259.11367859976053 \n",
      " *  Test Bias:  -5.2182297706604 \n",
      " *  Test Rel-Err (%):  24.83784705400467\n",
      "================================================\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "run training.py"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# RESULTS\n",
    " - Example: mean prediction from 00:00 to 23:00\n",
    " - Learning curve\n",
    " - Error distribution: spatial and temporal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "outputdir  = opt.outputdir\n",
    "with open(os.path.join(outputdir, 'logs.json'), 'r') as f:\n",
    "    logs = json.load(f)\n",
    "    \n",
    "with open(os.path.join(outputdir, 'config.json'), 'r') as f:\n",
    "    config = json.load(f)\n",
    "\n",
    "opt = DotDict(config)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# DENSE\n",
    "inputs = opt.n_out_sp*(opt.n_points + opt.n_exo + 1) \n",
    "outputs = opt.n_out_sp*opt.n_points\n",
    "\n",
    "model = MLP(n_inputs=inputs + opt.n_ar*opt.n_points, n_outputs=outputs, n_layers=opt.n_layers_dns, n_hidden=opt.n_hidden_dns)\n",
    "model.to(device)\n",
    "model.load_state_dict(torch.load(os.path.join(outputdir, 'spatial_model.pt')))\n",
    "\n",
    "# ESPACIAL\n",
    "spatial_model = AttentionCNN(in_channels=opt.n_inp_sp, out_channels=opt.n_out_sp, dim_x=opt.dim_x, dim_y=opt.dim_y)\n",
    "spatial_model.to(device)\n",
    "spatial_model.load_state_dict(torch.load(\"../Trained models/spatial_model.pth\"))\n",
    "\n",
    "# TEMPORAL\n",
    "temporal_encoder = EncoderLSTM(opt.in_dim_tem, opt.n_hidden_tem, device=device)\n",
    "temporal_encoder.to(device)\n",
    "temporal_encoder.load_state_dict(torch.load(\"../Trained models/encoder.pth\"))\n",
    "temporal_decoder = BahdanauDecoder(opt.n_hidden_tem, opt.out_dim_tem)\n",
    "temporal_decoder.to(device)\n",
    "temporal_decoder.load_state_dict(torch.load(\"../Trained models/decoder.pth\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n",
    "_, _, _, _, X_test_time, _, _, _, \\\n",
    "_, _, _, _, X_test_space, Y_test, min_value_space, max_value_space, \\\n",
    "_, _, X_test_exo, _, _ = data_transform(opt)\n",
    "\n",
    "test_dataset = []\n",
    "for i in range(len(Y_test)):\n",
    "   test_dataset.append([X_test_time[i], X_test_space[i], X_test_exo[i], Y_test[i]]) \n",
    "    \n",
    "\n",
    "test_loader = torch.utils.data.DataLoader(dataset = test_dataset,\n",
    "                                           batch_size = len(Y_test),\n",
    "                                           shuffle = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.eval()\n",
    "spatial_model.eval()\n",
    "temporal_encoder.eval()\n",
    "temporal_decoder.eval()\n",
    "with torch.no_grad():        \n",
    "    for x_time, x_space, x_exo, y in test_loader:\n",
    "        if torch.cuda.is_available():\n",
    "            x_time = x_time.view(-1, opt.n_inp_tem, opt.in_dim_tem).to(device)\n",
    "            x_space = x_space.to(device)\n",
    "            x_exo = x_exo.to(device)\n",
    "            y = y.to(device)\n",
    "        else:\n",
    "            x_time = x_time\n",
    "            x_space = x_space\n",
    "            x_exo = x_exo\n",
    "            y = y\n",
    "        y_time = evaluate_temp_att(temporal_encoder, temporal_decoder, x_time, opt.n_out_sp, device)\n",
    "        y_space, _ = spatial_model(x_space)\n",
    "        x = torch.cat((y_time.unsqueeze(2), y_space.squeeze().view(-1,opt.n_out_sp,opt.n_points), x_exo), dim = 2).view(-1, inputs)\n",
    "        x = torch.cat((x,x_space[:,-opt.n_ar:].view(-1,opt.n_ar*opt.n_points)), dim = 1)\n",
    "        y_pred = model(x).view(-1,opt.n_out_sp,opt.dim_x,opt.dim_y)\n",
    "        \n",
    "        y_dnorm = denormalize_data(y.view(-1, opt.n_out_sp, opt.n_points).cpu(), min_value_space, max_value_space)\n",
    "        y_pred_dnorm = denormalize_data(y_pred.view(-1, opt.n_out_sp, opt.n_points).cpu(), min_value_space, max_value_space)\n",
    "\n",
    "y_tstep = y_dnorm[1::24]\n",
    "y_pred_tstep = y_pred_dnorm[1::24]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Absolute error')"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1190x340 with 6 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "real = y_tstep.mean(0)\n",
    "prediction = y_pred_tstep.mean(0)\n",
    "\n",
    "plt.figure('Example', figsize=(14, 4), dpi=85)\n",
    "\n",
    "plt.subplot(1, 3, 1)\n",
    "plt.imshow(real.T,  vmin = real.min(), vmax = real.max(), aspect='auto', cmap='jet')\n",
    "plt.xticks(np.arange(0, 24, 2))\n",
    "#plt.yticks(np.arange(0, 30, 1))\n",
    "plt.xlabel('Hour of the day')\n",
    "plt.colorbar()\n",
    "plt.title('Ground truth')\n",
    "\n",
    "plt.subplot(1, 3, 2)\n",
    "plt.imshow(prediction.T,  vmin = real.min(), vmax = real.max(), aspect='auto', cmap='jet')\n",
    "plt.xticks(np.arange(0, 24, 2))\n",
    "#plt.yticks(np.arange(0, 30, 1))\n",
    "plt.xlabel('Hour of the day')\n",
    "plt.colorbar()\n",
    "plt.title('CRANN prediction')\n",
    "\n",
    "plt.subplot(1, 3, 3)\n",
    "plt.imshow(real.sub(prediction).abs().T, aspect='auto', cmap='gray_r')\n",
    "plt.xticks(np.arange(0, 24, 2))\n",
    "#plt.yticks(np.arange(0, 30, 1))\n",
    "plt.xlabel('Hour of the day')\n",
    "plt.colorbar()\n",
    "plt.title('Absolute error')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Learning curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fa58ffd2110>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 840x280 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure('Error', figsize=(12, 4), dpi=70)\n",
    "plt.plot(np.sqrt(logs['train.mse']), label = 'Train')\n",
    "plt.plot(np.sqrt(logs['val.mse']), label = 'Validation')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Temporal RMSE distribution: hour"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'Hour of the day')"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1190x340 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure('RMSE dist hour', figsize=(14, 4), dpi=85)\n",
    "plt.bar(x = range(0,24),height = rmse(y_pred_tstep,y_tstep, dim=2))\n",
    "plt.ylabel('RMSE')\n",
    "plt.xlabel('Hour of the day')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Temporal RMSE distribution: timestep"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'Timestep')"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1190x340 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure('RMSE dist timestep', figsize=(14, 4), dpi=85)\n",
    "plt.bar(x = range(0,24),height = rmse(y_pred_dnorm, y_dnorm, dim=2))\n",
    "plt.ylabel('RMSE')\n",
    "plt.xlabel('Timestep')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Spatial RMSE distribution"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'Sensor')"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1190x340 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure('RMSE dist spatial', figsize=(14, 4), dpi=85)\n",
    "plt.bar(x = np.arange(0,30),height = rmse(y_pred_dnorm,y_dnorm, dim=1))\n",
    "plt.ylabel('RMSE')\n",
    "plt.xlabel('Sensor')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
